package com.ruoyi.module.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 订单对象 fu_order
 *
 * @author fubojin
 * @date 2024-12-06
 */
@Data
public class Order extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private Long id;

    /**
     * 用户ID
     */
    @Excel(name = "用户ID")
    private Long userId;

    /**
     * 角色ID
     */
    @Excel(name = "角色ID")
    private Long roleId;

    /**
     * 订单用户ID
     */
    @Excel(name = "订单用户ID")
    private Long orderUserId;

    /**
     * 用户名称
     */
    @Excel(name = "用户名称")
    private String nickName;

    /**
     * 购买客户名称
     */
    @Excel(name = "购买客户名称")
    private String userName;

    /**
     * 录入用户ID
     */
    @Excel(name = "录入用户ID")
    private Long enterOrderUserId;

    @Excel(name = "录入订单用户名称")
    private String enterOrderUserName;

    @Excel(name = "经销商（分公司）ID")
    private Long distributorId;

    @Excel(name = "经销商（分公司）")
    private String distributorName;

    @Excel(name = "经销商（分公司真实名称）")
    private String companyName;

    @Excel(name = "客户类型（1-新开发客户，2-VIP客户）")
    private Integer enterUserType;


    /**
     * 商品数量
     */
    @Excel(name = "商品数量")
    private Integer goodsNum;

    /**
     * 商品总额
     */
    @Excel(name = "商品总额")
    private BigDecimal goodsTotalMoney;

    /**
     * 片区金额（订单资金明细变动金额）
     */
    @Excel(name = "订单资金明细变动金额")
    private BigDecimal fundChangeMoney;

    /**
     * 商品（赠品）总额
     */
    @Excel(name = "商品（赠品）总额")
    private BigDecimal goodsGiftMoney;

    /**
     * 订单单号
     */
    @Excel(name = "订单单号")
    private String orderNo;

    /**
     * 微信支付系统生成的订单号
     */
    @Excel(name = "微信支付系统生成的订单号")
    private String transactionId;

    /**
     * 是否面膜活动(0-未参加，1-参加)
     */
    @Excel(name = "是否面膜活动")
    private Integer isFacialActivity;

    /**
     * 订单类型（1-录入订单，2-客户小程序下单，3-客户网页下单, 4-转入订单，5-积分订单）
     */
    @Excel(name = "下单位置")
    private Integer orderType;

    /**
     * 所属区域（1-大区，2-片区，3-营业部）
     */
    @Excel(name = "所属区域")
    private Integer region;

    /**
     * 运费（实收邮费-客户）
     */
    @Excel(name = "运费（客户邮费-客户）")
    private BigDecimal freight;

    /**
     * 运费（实付邮费-经销商）
     */
    @Excel(name = "运费（实付邮费-经销商）")
    private BigDecimal userFreight;

    /**
     * 订单总额（实付款）
     */
    @Excel(name = "订单总额", readConverterExp = "实付款")
    private BigDecimal orderTotalMoney;

    /**
     * 退货款
     */
    private BigDecimal refundPayment;

    /**
     * 订单状态 0-待支付, 1-待发货, 2-待收货, 3-已完成, 4-已取消, 5-失败, 6-已关闭, 7-退货, 8-待提交,9-申请取消发货 ,10退款成功,14-申请退款
     */
    @Excel(name = "订单状态")
    private Integer payStatus;

    /**
     * 评价（0-待评价，1-已评价）
     */
    @Excel(name = "评价（0-待评价，1-已评价）")
    private Integer evaluate;

    /**
     * 申请取消发货状态（1-申请取消发货，2-申请成功，3-申请失败）
     */
    private Integer cancelStatus;
    /**
     * 申请审核原因
     */
    private String cancelReason;

    /**
     * 订单状态（1-正常，2-退款）
     */
    private Integer orderStatus;


    /**
     * 支付方式-微信支付-wx 支付宝-alipay 银行转账-bank
     */
    @Excel(name = "支付方式-微信支付-wx 支付宝-alipay 银行转账-bank")
    private String payType;

    /**
     * 支付时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date payTime;

    /**
     * 支付位置（app-APP内支付，program-小程序内支付）
     */
    @Excel(name = "支付位置", readConverterExp = "a=pp-APP内支付，program-小程序内支付")
    private String payPosition;

    /**
     * 配送公司标签
     */
    private String dictLabel;

    /**
     * 配送公司 (数据字典配置)
     */
    @Excel(name = "配送公司")
    private String deliveryType;

    /**
     * 发快递实际物流公司
     */
    @Excel(name = "发快递实际物流公司")
    private String deliveryCompany;

    /**
     * 快递单号
     */
    @Excel(name = "快递单号")
    private String deliveryNo;

    /**
     * 发货时间
     */
    @Excel(name = "发货时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date deliveryTime;

    /**
     * 取消原因
     */
    @Excel(name = "取消原因")
    private String reasonForCancel;

    /**
     * 地址收货人
     */
    @Excel(name = "地址收货人")
    private String consignee;

    /**
     * 地址收货人联系方式
     */
    @Excel(name = "地址收货人联系方式")
    private String consigneePhone;

    /**
     * 详细地址
     */
    @Excel(name = "详细地址")
    private String address;

    /**
     * 提交状态
     */
    @Excel(name = "提交状态")
    private Integer subStatus;

    /**
     * 提交时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date subTime;

    /**
     * 删除状态（0-未删除，1-删除）
     */
    private Integer deleteStatus;

    /**
     * 删除时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date deleteTime;

    /**
     * 签收时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date signTime;

    /**
     * 省编码
     */
    private String provinceCode;

    /**
     * 市编码
     */
    private String cityCode;

    /**
     * 区编码
     */
    private String areaCode;

    /**
     * 地址详情
     */
    private String addressDetails;


    /** 经销商ID(分公司) */
    private Long companyId;

    /** 自己及下属部门 */
    private Long deptId;

    /** 小组ID */
    private Long groupId;


    /** 级别（0-总公司，1-分公司，2-小组，3-其它） */
    private Integer level;

    /**
     * 订单对应商品
     */
    private List<OrderGoods> orderGoodsList;


    /** 录入人  员工类型(1-管理员, 2-主管, 3-组长, 4-业务员 ) */
    private Integer employeeType;

    /** 下单开始时间 */
    private Date beginOrderTime;

    /** 下单结束时间 */
    private Date endOrderTime;

    /** 提交开始时间 */
    private Date beginSubmitTime;

    /** 提交结束时间 */
    private Date endTSubmitTime;

    /** 签收开始时间 */
    private Date beginSignTime;

    /** 签收结束时间 */
    private Date endSignTime;

}
